<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //for ...of循环
        // var arr = ['1', '2']
        // var it = makeIterator(arr)
        // console.log( it.next());
        // console.log( it.next());
        // console.log( it.next());

        // {
        //     value:'1', done: fales
        // }
        // function makeIterator(arr) {
            // var nextIndex = 0;
            /* 返回一个对象，对象中有一个next方法；
            next 方法也会返回一个对象，对象中包含value属性和done属性；
            一旦done属性为true表示Iterator调用结束
            */
            // return{ 
                // next: function () {
                    // return nextIndex < arr.length ? {
                        // value:arr[nextIndex++],done: false
                    // }:{
                        // value: undefined,done: true
                    // }
                // }
            // }
        // }

        //Symbol.iterator属性代码理解
        // const obj = {
            // obj 有Symbol.iterator属性 ，是一个方法
            // [Symbol.iterator]: function () {
                //这个方法会返回一个具有next属性的对象
                // return {
                    //next是一个函数调用这个函数，会返回带有value和done两个属性的对象
                    // next: function () {
                        // return {
                            // value: 1,
                            // done: true
                        // };
                    // }
                // };
            // }
        // };

        var arr = ['1', '2']
        console.log(arr)

        var iter = arr[Symbol.iterator]()
        //输出结果里有next方法
        console.log(iter)
        //调用并输出next，输出结果{value: '1', done: false}
        console.log(iter.next())
        //再次调用并输出next，输出结果为{value: '2', done: false}
        console.log(iter.next())
        //再次调用并输出next，输出结果为{value: undefined, done: true}。表示具有Symbol.iterator属性
        console.log(iter.next())

        




    </script>
</body>
</html>